package someTestExcemple.huaweiOd.divideAndRecursion;

import java.util.Scanner;

//华为OD机试 - 分糖果 - 分治递归（Java 2025 A卷 100分）
//https://blog.csdn.net/guorui_java/article/details/130938918
public class DivideCandy {
    public static void main(String[] args) {
        /**
         * byte：8 位有符号整数，取值范围是 -128 到 127。
         * short：16 位有符号整数，取值范围是 -32768 到 32767。
         * int：32 位有符号整数，取值范围是 -2147483648 到 2147483647。
         * long：64 位有符号整数，取值范围是 -9223372036854775808 到 9223372036854775807。
         */
        Scanner sc = new Scanner(System.in);
        int count=0;
        long canDySum = Integer.parseInt(sc.nextLine());
        System.out.println(minDivideTimes(canDySum,count));
    }
    public static int minDivideTimes(long canDySum,int count) {
        if(canDySum<=1) {
            return count;
        } else {
            if(canDySum%2==0) {
                return minDivideTimes(canDySum/2,count+1);
            } else {
                //如果是奇数 -取 -放回一个和再取出一个的操作次数更小值
                return Math.min(minDivideTimes((canDySum+1)/2,count+1),minDivideTimes((canDySum-1)/2,count+1));
            }
        }

    }
}
